home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / ParagraphView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  13.0 KB  |  695 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Graphics;
  6. import java.awt.Point;
  7. import java.awt.Rectangle;
  8. import java.awt.Shape;
  9. import java.util.Vector;
  10. import javax.swing.SizeRequirements;
  11. import javax.swing.event.DocumentEvent;
  12. import javax.swing.text.Position.Bias;
  13.  
  14. public class ParagraphView extends BoxView implements TabExpander {
  15.    private int justification;
  16.    private float lineSpacing;
  17.    protected int firstLineIndent;
  18.    private int tabBase;
  19.    private int layoutSpan = -1;
  20.    private Vector layoutPool;
  21.    static char[] tabChars = new char[1];
  22.    static char[] tabDecimalChars;
  23.  
  24.    static {
  25.       tabChars[0] = '\t';
  26.       tabDecimalChars = new char[2];
  27.       tabDecimalChars[0] = '\t';
  28.       tabDecimalChars[1] = '.';
  29.    }
  30.  
  31.    public ParagraphView(Element var1) {
  32.       super(var1, 1);
  33.       this.setPropertiesFromAttributes();
  34.    }
  35.  
  36.    // $FF: synthetic method
  37.    static int access$0(ParagraphView var0) {
  38.       return var0.justification;
  39.    }
  40.  
  41.    protected void adjustRow(Row var1, int var2, int var3) {
  42.       int var4 = ((CompositeView)var1).getViewCount();
  43.       int var5 = 0;
  44.       int var6 = 0;
  45.       int var7 = 0;
  46.       int var8 = -1;
  47.       boolean var9 = false;
  48.  
  49.       for(int var11 = 0; var11 < var4; ++var11) {
  50.          View var10 = ((CompositeView)var1).getView(var11);
  51.          int var12 = var2 - var5;
  52.          int var13 = var10.getBreakWeight(0, (float)(var3 + var5), (float)var12);
  53.          if (var13 >= var6) {
  54.             var6 = var13;
  55.             var8 = var11;
  56.             var7 = var5;
  57.             if (var13 >= 3000) {
  58.                break;
  59.             }
  60.          }
  61.  
  62.          var5 = (int)((float)var5 + var10.getPreferredSpan(0));
  63.       }
  64.  
  65.       if (var8 >= 0) {
  66.          int var19 = var2 - var7;
  67.          View var16 = ((CompositeView)var1).getView(var8);
  68.          var16 = var16.breakView(0, var16.getStartOffset(), (float)(var3 + var7), (float)var19);
  69.          View[] var20 = new View[]{var16};
  70.          ((BoxView)var1).replace(var8, var4 - var8, var20);
  71.          int var14 = this.layoutPool.size();
  72.  
  73.          for(int var15 = 0; var15 < var14; ++var15) {
  74.             var16 = (View)this.layoutPool.elementAt(var15);
  75.             if (var16.getParent() == null) {
  76.                var16.setParent(this);
  77.             }
  78.          }
  79.  
  80.       }
  81.    }
  82.  
  83.    public View breakView(int var1, float var2, Shape var3) {
  84.       if (var1 == 1) {
  85.          if (var3 != null) {
  86.             Rectangle var4 = var3.getBounds();
  87.             ((BoxView)this).setSize((float)var4.width, (float)var4.height);
  88.          }
  89.  
  90.          return this;
  91.       } else {
  92.          return this;
  93.       }
  94.    }
  95.  
  96.    protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
  97.       if (var2 == null) {
  98.          var2 = new SizeRequirements();
  99.       }
  100.  
  101.       float var3 = 0.0F;
  102.       int var4 = this.layoutPool.size();
  103.  
  104.       for(int var5 = 0; var5 < var4; ++var5) {
  105.          View var6 = (View)this.layoutPool.elementAt(var5);
  106.          var3 += var6.getPreferredSpan(var1);
  107.       }
  108.  
  109.       float var7 = (float)(var1 == 0 ? ((CompositeView)this).getLeftInset() + ((CompositeView)this).getRightInset() : ((CompositeView)this).getTopInset() + ((CompositeView)this).getBottomInset());
  110.       var2.minimum = (int)var7 + 5;
  111.       var2.preferred = Math.max(var2.minimum, (int)var3);
  112.       var2.maximum = 32767;
  113.       var2.alignment = 0.5F;
  114.       return var2;
  115.    }
  116.  
  117.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  118.       this.setPropertiesFromAttributes();
  119.       Element var4 = ((View)this).getElement();
  120.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  121.       if (var5 != null) {
  122.          this.updateLogicalChildren(var5, var3);
  123.       }
  124.  
  125.       int var6 = var1.getOffset();
  126.       int var7 = var6 + var1.getLength();
  127.       int var8 = var4.getElementIndex(var6);
  128.       int var9 = var4.getElementIndex(var7 - 1);
  129.       if (var6 == var7 && var9 < var8 && var8 > 0) {
  130.          --var8;
  131.          var9 = var8 + 1;
  132.       }
  133.  
  134.       for(int var10 = var8; var10 <= var9; ++var10) {
  135.          View var11 = (View)this.layoutPool.elementAt(var10);
  136.          var11.changedUpdate(var1, (Shape)null, var3);
  137.       }
  138.  
  139.       this.layoutSpan = Integer.MAX_VALUE;
  140.       ((BoxView)this).preferenceChanged((View)null, true, true);
  141.       if (var2 != null) {
  142.          Rectangle var13 = ((CompositeView)this).getInsideAllocation(var2);
  143.          this.layout(var13.width, var13.height);
  144.          Container var12 = ((View)this).getContainer();
  145.          ((Component)var12).repaint(var13.x, var13.y, var13.width, var13.height);
  146.       }
  147.  
  148.    }
  149.  
  150.    View createView(int var1) {
  151.       int var2 = ((View)this).getElement().getElementIndex(var1);
  152.       View var3 = (View)this.layoutPool.elementAt(var2);
  153.       int var4 = var3.getEndOffset();
  154.       AbstractDocument var5 = (AbstractDocument)((View)this).getDocument();
  155.       if (var5.getProperty("i18n").equals(Boolean.TRUE)) {
  156.          Element var6 = var5.getBidiRootElement();
  157.          if (var6.getElementCount() > 1) {
  158.             int var7 = var6.getElementIndex(var1);
  159.             Element var8 = var6.getElement(var7);
  160.             var4 = Math.min(var8.getEndOffset(), var4);
  161.          }
  162.       }
  163.  
  164.       if (var1 == var3.getStartOffset() && var4 == var3.getEndOffset()) {
  165.          return var3;
  166.       } else {
  167.          var3 = var3.createFragment(var1, var4);
  168.          return var3;
  169.       }
  170.    }
  171.  
  172.    protected int findOffsetToCharactersInString(char[] var1, int var2) {
  173.       int var3 = var1.length;
  174.       int var4 = ((View)this).getEndOffset();
  175.       Segment var5 = new Segment();
  176.  
  177.       try {
  178.          ((View)this).getDocument().getText(var2, var4 - var2, var5);
  179.       } catch (BadLocationException var10) {
  180.          return -1;
  181.       }
  182.  
  183.       int var6 = var5.offset;
  184.  
  185.       for(int var7 = var5.offset + var5.count; var6 < var7; ++var6) {
  186.          char var8 = var5.array[var6];
  187.  
  188.          for(int var9 = 0; var9 < var3; ++var9) {
  189.             if (var8 == var1[var9]) {
  190.                return var6 - var5.offset + var2;
  191.             }
  192.          }
  193.       }
  194.  
  195.       return -1;
  196.    }
  197.  
  198.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  199.       Document var3 = ((View)this).getDocument();
  200.       return var3 instanceof AbstractDocument && !((AbstractDocument)var3).isLeftToRight(((View)this).getStartOffset(), ((View)this).getStartOffset() + 1);
  201.    }
  202.  
  203.    public float getAlignment(int var1) {
  204.       switch (var1) {
  205.          case 0:
  206.             return 0.5F;
  207.          case 1:
  208.             float var2 = 0.5F;
  209.             if (((CompositeView)this).getViewCount() != 0) {
  210.                int var3 = (int)((BoxView)this).getPreferredSpan(1);
  211.                View var4 = ((CompositeView)this).getView(0);
  212.                int var5 = (int)var4.getPreferredSpan(1);
  213.                var2 = var3 != 0 ? (float)(var5 / 2) / (float)var3 : 0.0F;
  214.             }
  215.  
  216.             return var2;
  217.          default:
  218.             throw new IllegalArgumentException("Invalid axis: " + var1);
  219.       }
  220.    }
  221.  
  222.    public int getBreakWeight(int var1, float var2) {
  223.       return var1 == 1 ? 0 : 0;
  224.    }
  225.  
  226.    protected int getClosestPositionTo(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, int var6, int var7) throws BadLocationException {
  227.       JTextComponent var8 = (JTextComponent)((View)this).getContainer();
  228.       Document var9 = ((View)this).getDocument();
  229.       AbstractDocument var10 = var9 instanceof AbstractDocument ? (AbstractDocument)var9 : null;
  230.       View var11 = ((CompositeView)this).getView(var6);
  231.       int var19 = -1;
  232.       var5[0] = Bias.Forward;
  233.       int var13 = 0;
  234.  
  235.       for(int var14 = var11.getViewCount(); var13 < var14; ++var13) {
  236.          View var15 = var11.getView(var13);
  237.          int var16 = var15.getStartOffset();
  238.          boolean var17 = var10 != null ? var10.isLeftToRight(var16, var16 + 1) : true;
  239.          if (var17) {
  240.             var19 = var16;
  241.  
  242.             for(int var18 = var15.getEndOffset(); var19 < var18; ++var19) {
  243.                if (var8.modelToView(var19).getBounds().x >= var7) {
  244.                   return var19;
  245.                }
  246.             }
  247.  
  248.             --var19;
  249.          } else {
  250.             for(var19 = var15.getEndOffset() - 1; var19 >= var16; --var19) {
  251.                if (var8.modelToView(var19).getBounds().x >= var7) {
  252.                   return var19;
  253.                }
  254.             }
  255.  
  256.             ++var19;
  257.          }
  258.       }
  259.  
  260.       if (var19 == -1) {
  261.          return ((View)this).getStartOffset();
  262.       } else {
  263.          return var19;
  264.       }
  265.    }
  266.  
  267.    protected View getLayoutView(int var1) {
  268.       return (View)this.layoutPool.elementAt(var1);
  269.    }
  270.  
  271.    protected int getLayoutViewCount() {
  272.       return this.layoutPool.size();
  273.    }
  274.  
  275.    protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  276.       int var12;
  277.       if (var1 == -1) {
  278.          var12 = var4 == 1 ? ((CompositeView)this).getViewCount() - 1 : 0;
  279.       } else {
  280.          if (var2 == Bias.Backward && var1 > 0) {
  281.             var12 = this.getViewIndexAtPosition(var1 - 1);
  282.          } else {
  283.             var12 = this.getViewIndexAtPosition(var1);
  284.          }
  285.  
  286.          if (var4 == 1) {
  287.             if (var12 == 0) {
  288.                return -1;
  289.             }
  290.  
  291.             --var12;
  292.          } else {
  293.             ++var12;
  294.             if (var12 >= ((CompositeView)this).getViewCount()) {
  295.                return -1;
  296.             }
  297.          }
  298.       }
  299.  
  300.       JTextComponent var7 = (JTextComponent)((View)this).getContainer();
  301.       Caret var8 = var7.getCaret();
  302.       Point var9 = var8 != null ? var8.getMagicCaretPosition() : null;
  303.       int var10;
  304.       if (var9 == null) {
  305.          Rectangle var11 = var7.getUI().modelToView(var7, var1, var2);
  306.          if (var11 == null) {
  307.             var10 = 0;
  308.          } else {
  309.             var10 = var11.getBounds().x;
  310.          }
  311.       } else {
  312.          var10 = var9.x;
  313.       }
  314.  
  315.       return this.getClosestPositionTo(var1, var2, var3, var4, var5, var12, var10);
  316.    }
  317.  
  318.    protected float getPartialSize(int var1, int var2) {
  319.       float var3 = 0.0F;
  320.       int var5 = ((CompositeView)this).getViewCount();
  321.       int var4 = ((View)this).getElement().getElementIndex(var1);
  322.  
  323.       int var7;
  324.       for(int var9 = this.layoutPool.size(); var1 < var2 && var4 < var9; var1 = var7) {
  325.          View var6 = (View)this.layoutPool.elementAt(var4++);
  326.          var7 = var6.getEndOffset();
  327.          int var8 = Math.min(var2, var7);
  328.          if (var6 instanceof TabableView) {
  329.             var3 += ((TabableView)var6).getPartialSpan(var1, var8);
  330.          } else {
  331.             if (var1 != var6.getStartOffset() || var8 != var6.getEndOffset()) {
  332.                return 0.0F;
  333.             }
  334.  
  335.             var3 += var6.getPreferredSpan(0);
  336.          }
  337.       }
  338.  
  339.       return var3;
  340.    }
  341.  
  342.    protected float getTabBase() {
  343.       return (float)this.tabBase;
  344.    }
  345.  
  346.    protected TabSet getTabSet() {
  347.       return StyleConstants.getTabSet(((View)this).getElement().getAttributes());
  348.    }
  349.  
  350.    protected View getViewAtPosition(int var1, Rectangle var2) {
  351.       int var3 = ((CompositeView)this).getViewCount();
  352.  
  353.       for(int var4 = 0; var4 < var3; ++var4) {
  354.          View var5 = ((CompositeView)this).getView(var4);
  355.          int var6 = var5.getStartOffset();
  356.          int var7 = var5.getEndOffset();
  357.          if (var1 >= var6 && var1 < var7) {
  358.             if (var2 != null) {
  359.                ((BoxView)this).childAllocation(var4, var2);
  360.             }
  361.  
  362.             return var5;
  363.          }
  364.       }
  365.  
  366.       if (var1 == ((View)this).getEndOffset()) {
  367.          View var8 = ((CompositeView)this).getView(var3 - 1);
  368.          if (var2 != null) {
  369.             ((BoxView)this).childAllocation(var3 - 1, var2);
  370.          }
  371.  
  372.          return var8;
  373.       } else {
  374.          return null;
  375.       }
  376.    }
  377.  
  378.    protected int getViewIndexAtPosition(int var1) {
  379.       if (var1 >= ((View)this).getStartOffset() && var1 < ((View)this).getEndOffset()) {
  380.          for(int var2 = ((CompositeView)this).getViewCount() - 1; var2 >= 0; --var2) {
  381.             View var3 = ((CompositeView)this).getView(var2);
  382.             if (var1 >= var3.getStartOffset() && var1 < var3.getEndOffset()) {
  383.                return var2;
  384.             }
  385.          }
  386.  
  387.          return -1;
  388.       } else {
  389.          return -1;
  390.       }
  391.    }
  392.  
  393.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  394.       Element var4 = ((View)this).getElement();
  395.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  396.       if (var5 != null) {
  397.          this.updateLogicalChildren(var5, var3);
  398.       }
  399.  
  400.       if (var5 != null && var5.getChildrenAdded().length > 0) {
  401.          int var12 = var5.getIndex();
  402.          int var14 = var1.getOffset();
  403.          if (var12 > 0) {
  404.             Element var17 = var4.getElement(var12 - 1);
  405.             if (var17.getEndOffset() >= var14) {
  406.                View var9 = (View)this.layoutPool.elementAt(var12 - 1);
  407.                var9.insertUpdate(var1, (Shape)null, var3);
  408.             }
  409.          }
  410.  
  411.          int var18 = var12 + var5.getChildrenAdded().length;
  412.          if (var18 < this.layoutPool.size()) {
  413.             Element var19 = var4.getElement(var18);
  414.             int var10 = var19.getStartOffset();
  415.             if (var10 >= var14 && var10 <= var14 + var1.getLength()) {
  416.                View var11 = (View)this.layoutPool.elementAt(var18);
  417.                var11.insertUpdate(var1, (Shape)null, var3);
  418.             }
  419.          }
  420.       } else {
  421.          int var6 = var1.getOffset();
  422.          int var7 = var4.getElementIndex(var6);
  423.          View var8 = (View)this.layoutPool.elementAt(var7);
  424.          var8.insertUpdate(var1, (Shape)null, var3);
  425.          if (var7 > 0 && var8.getStartOffset() == var6) {
  426.             var8 = (View)this.layoutPool.elementAt(var7 - 1);
  427.             var8.insertUpdate(var1, (Shape)null, var3);
  428.          }
  429.       }
  430.  
  431.       this.layoutSpan = Integer.MAX_VALUE;
  432.       ((BoxView)this).preferenceChanged((View)null, true, true);
  433.       Rectangle var13 = ((CompositeView)this).getInsideAllocation(var2);
  434.       if (var13 != null) {
  435.          this.layout(var13.width, var13.height);
  436.          Container var15 = ((View)this).getContainer();
  437.          ((Component)var15).repaint(var13.x, var13.y, var13.width, var13.height);
  438.       }
  439.  
  440.    }
  441.  
  442.    protected void layout(int var1, int var2) {
  443.       if (this.layoutSpan != var1) {
  444.          this.rebuildRows(var1);
  445.          int var4 = (int)((BoxView)this).getPreferredSpan(1);
  446.          if (var2 != var4) {
  447.             View var5 = ((View)this).getParent();
  448.             var5.preferenceChanged(this, false, true);
  449.          }
  450.       }
  451.  
  452.       super.layout(var1, var2);
  453.    }
  454.  
  455.    void layoutRow(Row var1, int var2) {
  456.       int var3 = this.tabBase + ((CompositeView)this).getLeftInset();
  457.       int var4 = this.layoutSpan;
  458.       int var5 = ((View)this).getEndOffset();
  459.       int var6 = var3;
  460.       var3 += ((CompositeView)var1).getLeftInset();
  461.       var4 -= var3 - var6;
  462.       int var7 = var4;
  463.       var6 = var3;
  464.       boolean var8 = false;
  465.  
  466.       while(var2 < var5 && var4 > 0) {
  467.          View var9 = this.createView(var2);
  468.          int var10;
  469.          if (var9 instanceof TabableView) {
  470.             var10 = (int)((TabableView)var9).getTabbedSpan((float)var3, this);
  471.          } else {
  472.             var10 = (int)var9.getPreferredSpan(0);
  473.          }
  474.  
  475.          if (var9.getBreakWeight(0, (float)var2, (float)var4) >= 3000) {
  476.             int var11 = ((CompositeView)var1).getViewCount();
  477.             if (var11 > 0) {
  478.                var9 = var9.breakView(0, var2, (float)var3, (float)var4);
  479.                if (var9 != null) {
  480.                   if (var9 instanceof TabableView) {
  481.                      var10 = (int)((TabableView)var9).getTabbedSpan((float)var3, this);
  482.                   } else {
  483.                      var10 = (int)var9.getPreferredSpan(0);
  484.                   }
  485.                } else {
  486.                   var10 = 0;
  487.                }
  488.             }
  489.  
  490.             var8 = true;
  491.          }
  492.  
  493.          var4 -= var10;
  494.          var3 += var10;
  495.          if (var9 != null) {
  496.             ((CompositeView)var1).append(var9);
  497.             var2 = var9.getEndOffset();
  498.          }
  499.  
  500.          if (var8) {
  501.             break;
  502.          }
  503.       }
  504.  
  505.       if (var4 < 0) {
  506.          this.adjustRow(var1, var7, var6);
  507.       } else if (((CompositeView)var1).getViewCount() == 0) {
  508.          View var15 = this.createView(var2);
  509.          ((CompositeView)var1).append(var15);
  510.       }
  511.  
  512.       if (this.lineSpacing > 1.0F) {
  513.          float var16 = ((BoxView)var1).getPreferredSpan(1);
  514.          float var17 = var16 * this.lineSpacing - var16;
  515.          if (var17 > 0.0F) {
  516.             ((CompositeView)var1).setInsets(((CompositeView)var1).getTopInset(), ((CompositeView)var1).getLeftInset(), (short)((int)var17), ((CompositeView)var1).getRightInset());
  517.          }
  518.       }
  519.  
  520.    }
  521.  
  522.    protected void loadChildren(ViewFactory var1) {
  523.       this.layoutPool = new Vector();
  524.       Element var2 = ((View)this).getElement();
  525.       int var3 = var2.getElementCount();
  526.  
  527.       for(int var4 = 0; var4 < var3; ++var4) {
  528.          View var5 = var1.create(var2.getElement(var4));
  529.          var5.setParent(this);
  530.          this.layoutPool.addElement(var5);
  531.       }
  532.  
  533.    }
  534.  
  535.    public float nextTabStop(float var1, int var2) {
  536.       if (this.justification != 0) {
  537.          return var1 + 10.0F;
  538.       } else {
  539.          var1 -= (float)this.tabBase;
  540.          TabSet var3 = this.getTabSet();
  541.          if (var3 == null) {
  542.             return (float)(this.tabBase + ((int)var1 / 72 + 1) * 72);
  543.          } else {
  544.             TabStop var4 = var3.getTabAfter(var1 + 0.01F);
  545.             if (var4 == null) {
  546.                return (float)this.tabBase + var1 + 5.0F;
  547.             } else {
  548.                int var5 = var4.getAlignment();
  549.                int var6;
  550.                switch (var5) {
  551.                   case 0:
  552.                   case 3:
  553.                   default:
  554.                      return (float)this.tabBase + var4.getPosition();
  555.                   case 1:
  556.                   case 2:
  557.                      var6 = this.findOffsetToCharactersInString(tabChars, var2 + 1);
  558.                      break;
  559.                   case 4:
  560.                      var6 = this.findOffsetToCharactersInString(tabDecimalChars, var2 + 1);
  561.                      break;
  562.                   case 5:
  563.                      return (float)this.tabBase + var4.getPosition();
  564.                }
  565.  
  566.                if (var6 == -1) {
  567.                   var6 = ((View)this).getEndOffset();
  568.                }
  569.  
  570.                float var7 = this.getPartialSize(var2 + 1, var6);
  571.                switch (var5) {
  572.                   case 1:
  573.                   case 4:
  574.                      return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7);
  575.                   case 2:
  576.                      return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7 / 2.0F);
  577.                   case 3:
  578.                   default:
  579.                      return var1;
  580.                }
  581.             }
  582.          }
  583.       }
  584.    }
  585.  
  586.    public void paint(Graphics var1, Shape var2) {
  587.       Rectangle var3 = var2.getBounds();
  588.       this.tabBase = var3.x;
  589.       super.paint(var1, var2);
  590.    }
  591.  
  592.    void rebuildRows(int var1) {
  593.       this.layoutSpan = var1;
  594.       int var2 = ((View)this).getStartOffset();
  595.       int var3 = ((View)this).getEndOffset();
  596.       ((CompositeView)this).removeAll();
  597.       int var4 = this.layoutPool.size();
  598.  
  599.       for(int var5 = 0; var5 < var4; ++var5) {
  600.          View var6 = (View)this.layoutPool.elementAt(var5);
  601.          var6.setParent(this);
  602.       }
  603.  
  604.       boolean var9 = true;
  605.  
  606.       while(var2 < var3) {
  607.          int var7 = var2;
  608.          Row var8 = new Row(this, ((View)this).getElement());
  609.          if (var9) {
  610.             ((CompositeView)var8).setInsets((short)0, (short)Math.min(var1 - 5, this.firstLineIndent), (short)0, (short)0);
  611.             var9 = false;
  612.          }
  613.  
  614.          ((CompositeView)this).append(var8);
  615.          this.layoutRow(var8, var2);
  616.          var2 = var8.getEndOffset();
  617.          if (var2 <= var7) {
  618.             throw new StateInvariantError("infinite loop in formatting");
  619.          }
  620.       }
  621.  
  622.    }
  623.  
  624.    public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  625.       Element var4 = ((View)this).getElement();
  626.       DocumentEvent.ElementChange var5 = var1.getChange(var4);
  627.       if (var5 != null) {
  628.          this.updateLogicalChildren(var5, var3);
  629.       }
  630.  
  631.       if (var5 == null || var5.getChildrenAdded().length == 0) {
  632.          int var6 = var1.getOffset();
  633.          int var7 = var4.getElementIndex(var6);
  634.          View var8 = (View)this.layoutPool.elementAt(var7);
  635.          var8.removeUpdate(var1, (Shape)null, var3);
  636.          if (var7 > 0 && var4.getElement(var7).getStartOffset() == var6) {
  637.             ((View)this.layoutPool.elementAt(var7 - 1)).removeUpdate(var1, (Shape)null, var3);
  638.          }
  639.       }
  640.  
  641.       this.layoutSpan = Integer.MAX_VALUE;
  642.       ((BoxView)this).preferenceChanged((View)null, true, true);
  643.       if (var2 != null) {
  644.          Rectangle var9 = ((CompositeView)this).getInsideAllocation(var2);
  645.          this.layout(var9.width, var9.height);
  646.          Container var10 = ((View)this).getContainer();
  647.          ((Component)var10).repaint(var9.x, var9.y, var9.width, var9.height);
  648.       }
  649.  
  650.    }
  651.  
  652.    protected void setFirstLineIndent(float var1) {
  653.       this.firstLineIndent = (int)var1;
  654.    }
  655.  
  656.    protected void setJustification(int var1) {
  657.       this.justification = var1;
  658.    }
  659.  
  660.    protected void setLineSpacing(float var1) {
  661.       this.lineSpacing = var1;
  662.    }
  663.  
  664.    protected void setPropertiesFromAttributes() {
  665.       AttributeSet var1 = ((View)this).getAttributes();
  666.       if (var1 != null) {
  667.          ((CompositeView)this).setParagraphInsets(var1);
  668.          this.setJustification(StyleConstants.getAlignment(var1));
  669.          this.lineSpacing = StyleConstants.getLineSpacing(var1);
  670.          this.firstLineIndent = (int)StyleConstants.getFirstLineIndent(var1);
  671.       }
  672.  
  673.    }
  674.  
  675.    void updateLogicalChildren(DocumentEvent.ElementChange var1, ViewFactory var2) {
  676.       int var3 = var1.getIndex();
  677.       Element[] var4 = var1.getChildrenRemoved();
  678.  
  679.       for(int var5 = 0; var5 < var4.length; ++var5) {
  680.          View var6 = (View)this.layoutPool.elementAt(var3);
  681.          var6.setParent((View)null);
  682.          this.layoutPool.removeElementAt(var3);
  683.       }
  684.  
  685.       Element[] var9 = var1.getChildrenAdded();
  686.  
  687.       for(int var7 = 0; var7 < var9.length; ++var7) {
  688.          View var8 = var2.create(var9[var7]);
  689.          var8.setParent(this);
  690.          this.layoutPool.insertElementAt(var8, var3 + var7);
  691.       }
  692.  
  693.    }
  694. }
  695.